﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Rance.Battle
{
    class 行动顺序
    {
        private List<角色> list = new List<角色>();
        public List<角色> List
        {
            get
            {
                var temp = list.FindAll(i => !i.是否败退 && (i.是否准备 || i.行动点 > 0));
                temp.Sort((v1,v2) => v1.顺序值.CompareTo(v2.顺序值));
                return temp;
             }
        }

        public List<角色> AllList
        {
            get {
                return list;
            }
        }

        private void update行动次序()
        {
            var list = List;
            for (int i = 0; i < list.Count; i++)
                 list[i].行动次序 = i;

            var tempList = AllList.FindAll(i => !list.Contains(i));

            foreach (var item in tempList)
                item.行动次序 = 99;
        }

        public void 初始化行动表(List<角色> list, 乱数表 乱数表)
        {
            foreach (var 角色 in list)
            {

                int min = 0;
                int max = 0;
                if (角色.实际速 <= 4)
                    min = Convert.ToInt32((28 - 角色.实际速) * 45);
                else if (角色.实际速 <= 5)
                    min = Convert.ToInt32((29 - 角色.实际速) * 45);
                else if (角色.实际速 <= 6)
                    min = Convert.ToInt32((29.5m - 角色.实际速) * 45);
                else
                    min = Convert.ToInt32((30 - 角色.实际速) * 45);

                max = Convert.ToInt32((35 - 角色.实际速) * 45);

                角色.顺序值 = Convert.ToInt32(((18 - 角色.兵种.速) * 70 + 乱数表.Random(min, max)) / 2);
            }
            this.list = list;

            update行动次序();
        }

        public void 行动(角色 角色, 主动技能 技能)
        {
            角色.顺序值 += Convert.ToInt32((技能.技能速度 + (11 - 角色.实际速) * 10) * 0.7m);

            update行动次序();
        }

        public void 打断(角色 角色)
        {
            角色.准备技能 = null;
            角色.是否准备 = false;
            角色.顺序值 += Convert.ToInt32(常量.打断延迟 - 角色.实际速 * 2);

            update行动次序();
        }
    }
}
